﻿// 游戏物体类型
const GameObjectType = {
    NOTHING: 0,     // 什么也没有
    WALL: 1,        // 墙
    BACKGROUND: 2,  // 箱子
    DESTINATION: 3, // 背景
    BOX: 4,         // 箱子的目的地
    MAN: 5          // 小人
}

// 移动结果
const _MoveResult = {
    CANNOT_MOVE: 0,     // 不具有移动能力
    NO_MOVE: 1,         // 没有移动
    NORMAL_MOVED: 2,    // 正常移动
    ARRIVED_ON_DEST: 3, // 移动到目标上
    LEFT_FROM_DEST: 4   // 离开目标
}

var gBaseGameObjects = null // 所有游戏物体

/**
 * 移动结果类的构造方法。
 */
function MoveResult() {
    this.result = _MoveResult.CANNOT_MOVE
}

/**
 * 基本游戏物体类的构造方法。
 * @param drawer    绘图者
 * @param gameBoard 游戏区域
 * @param type      类型
 * @param x, y      左上角坐标
 */
function BaseGameObject(drawer, gameBoard, type, x, y) {
    this.mDrawer = drawer   // 绘图者
    this.mImage = null      // 图片
    this.mType = type       // 类型
    this.mX = x             // 横向坐标
    this.mY = y             // 纵向坐标

    // 加载图片
    const image = new Image()
    image.onload = function() {
        drawer.drawImage(image, x * Const.GRID_SIZE, y * Const.GRID_SIZE)
        gameBoard.repaint()
    }
    image.src = Const.IMAGE_FILE_PATH + this.mType + Const.IMAGE_FILE_EXT
    this.mImage = image

    /**
     * 绘制自身。
     */
    this.draw = function() {
        this.mDrawer.drawImage(this.mImage, this.mX * Const.GRID_SIZE, this.mY * Const.GRID_SIZE)
    }

    /**
     * 移动。
     * @param baseGameObject    基本游戏物体
     * @param direction         方向
     * @param moveResult        移动结果
     * @return 被推动的箱子
     */
    this.move = function(baseGameObject, direction, moveResult) {
        moveResult.result = _MoveResult.CANNOT_MOVE
        return null
    }
}
